package com.lws.basic.utils.common;

import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.UnderlineSpan;

/**
 * 富文本工具类
 */

public class SpannableStringUtils {
    /**
     * 给富文本添加颜色
     * @param spannableString  富文本
     * @param color  颜色
     * @param start 其实位置
     * @param end  结束位置
     */
    public static void addColor(SpannableString spannableString, int color, int start, int end) {
        ForegroundColorSpan colorSpan = new ForegroundColorSpan(color);
        spannableString.setSpan(colorSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }

    public static void addBgColor(SpannableString spannableString, int color, int start, int end) {
        BackgroundColorSpan colorSpan = new BackgroundColorSpan(color);
        spannableString.setSpan(colorSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }



    /**
     * 按照比例修改富文本文字大小
     * @param spannableString 富文本
     * @param ratio  比例
     * @param start  开始位置
     * @param end    结束位置
     */
    public static void RelativeSize(SpannableString spannableString, float ratio, int start, int end) {
        RelativeSizeSpan sizeSpan01 = new RelativeSizeSpan(ratio);
        spannableString.setSpan(sizeSpan01, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }

    /**
     * 添加删除线
     * @param spannableString 富文本
     * @param start 开始位置
     * @param end 结束位置
     */
    public static void addStrike(SpannableString spannableString, int start, int end) {
        StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
        spannableString.setSpan(strikethroughSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }

    /**
     * 添加下划线
     * @param spannableString  富文本
     * @param start 开始位置
     * @param end 结束位置
     */
    public static void addUnderline(SpannableString spannableString, int start, int end) {
        UnderlineSpan underlineSpan = new UnderlineSpan();
        spannableString.setSpan(underlineSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }

    /**
     * 添加上标
     * @param spannableString  富文本
     * @param start 开始位置
     * @param end 结束位置
     */
    public static void addSuperscript(SpannableString spannableString, int start, int end) {
        SuperscriptSpan superscriptSpan = new SuperscriptSpan();
        spannableString.setSpan(superscriptSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }

    /**
     * 添加下标
     * @param spannableString 富文本
     * @param start 开始位置
     * @param end 结束位置
     */
    public static void addSubscript(SpannableString spannableString, int start, int end) {
        SubscriptSpan subscriptSpan = new SubscriptSpan();
        spannableString.setSpan(subscriptSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }

    /**
     * 给富文本添加黑体和斜体
     * @param spannableString
     * @param typeFace  {@link android.graphics.Typeface#BOLD}
     * @param start 开始位置
     * @param end  结束位置
     */
    public static void addStyle(SpannableString spannableString, int typeFace, int start, int end) {
        StyleSpan styleSpan_B  = new StyleSpan(Typeface.BOLD);
        spannableString.setSpan(styleSpan_B, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }


    /**
     * 给富文本添加小图标
     * @param spannableString   富文本
     * @param drawable  图标
     * @param start 开始位置
     * @param end 结束位置
     */
    public static void addImg(SpannableString spannableString, Drawable drawable, int start, int end) {
        ImageSpan imageSpan = new ImageSpan(drawable);
        spannableString.setSpan(imageSpan, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }
}
